﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ModuloAdministrativo.WSsiar;

namespace ModuloAdministrativo.Classes
{
    public class VendaDelivery
    {
        public int Id;
        public int Id_Cliente;
        public DateTime HoraA;
        public DateTime HoraF;
        public string Estado;

        public double total = 0.0;
        public double desconto = 0.0;
        public double totalcomdesconto = 0.0;
        public string formadepagamento = null;
        public double troco = 0.0;
        public double valorAReceber = 0.0;

        ServicosSIARSoapClient ws;

        private EnderecoBean endereco;
        private PessoaBean clienteVenda;
        private PessoaBean funcionario;

        public List<Pedido> pedidos;
        public List<PratoBean> pratos;
        public List<BebidaBean> bebidas;

        public VendaDelivery() {
            pedidos = new List<Pedido>();
            pratos = new List<PratoBean>();
            bebidas = new List<BebidaBean>();

            ws = new ServicosSIARSoapClient();
        }

        public VendaDelivery(int id, int id_cliente, DateTime horaa, DateTime horaf, string estado)
        {
            this.Id = id;
            this.Id_Cliente = id_cliente;
            this.HoraA = horaa;
            this.HoraF = horaf;
            this.Estado = estado;

            pedidos = new List<Pedido>();
            pratos = new List<PratoBean>();
            bebidas = new List<BebidaBean>();

            ws = new ServicosSIARSoapClient();
        }

        public PessoaBean Funcionario
        {
            get { return funcionario; }
            set { funcionario = value; }
        }

        public void novoPedidoBebida(BebidaBean bebida)
        {
            Pedido novopedido = new Pedido();
            novopedido.ID_Bebida = bebida.Id;
            novopedido.ID_Func = funcionario.Id;
            novopedido.Status = "Em Espera";

            pedidos.Add(novopedido);
            bebidas.Add(bebida);
        }

        public void novoPedidoPrato(PratoBean prato)
        {
            Pedido novopedido = new Pedido();
            novopedido.ID_Prato = prato.Id;
            novopedido.ID_Func = funcionario.Id;
            novopedido.Status = "Em Espera";
            pedidos.Add(novopedido);

            pratos.Add(prato);
        }

        public void removerPedido(string nome)
        {
            int id_item = 0;
            Pedido nPedido = null;
            BebidaBean nBebida = null;
            PratoBean nPrato = null;
            foreach(BebidaBean beb in bebidas)
            {
                if(beb.Nome.Equals(nome))
                {
                    nBebida = new BebidaBean();
                    nBebida = beb;
                    id_item = beb.Id;                    
                }
            }
            foreach(PratoBean pra in pratos)
            {
                if(pra.Nome.Equals(nome))
                {
                    nPrato = new PratoBean();
                    nPrato = pra;
                    id_item = pra.Id;                   
                }
            }
            foreach (Pedido ped in pedidos)
            {
                if (ped.ID_Bebida != null)
                {
                    if (ped.ID_Bebida == id_item)
                    {
                        nPedido = new Pedido();
                        nPedido = ped;                       
                    }
                }                    
            }
            bebidas.Remove(nBebida);
            pratos.Remove(nPrato);
            pedidos.Remove(nPedido);            
        }

        public void setId_Cliente(PessoaBean cliente)
        {
            this.clienteVenda = cliente;
            this.Id_Cliente = cliente.Id;
            endereco = ws.enderecoBuscar(clienteVenda.Id);

            foreach (Pedido ped in pedidos)
            {
                ped.ID_Cliente = this.clienteVenda.Id;
            }
        }

        public void salvarPedidos()
        {
            foreach (Pedido ped in pedidos)
            {
                ws.PedidoCadastrar(ped);
            }
        }

        public Venda getVenda()
        {
            Venda venda = new Venda();
            venda.HoraA = this.HoraA;
            venda.ID_Cliente = this.Id_Cliente;
            venda.Estado = this.Estado;

            return venda;
        }

        public String imprimirConta()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("\t\tSIAR\n");
            sb.Append("Sistema Interativo de Automação de Restaurantes\n");
            //sb.Append("\nNº Venda:  " +getVenda().ID+ "\n");
            sb.Append("\nCliente:  " + this.clienteVenda.Nome + "\n");
            sb.Append("\nTelefone:  " + this.clienteVenda.Telefone + "\n");
            sb.Append("Rua : " + endereco.Rua + "\n");
            sb.Append("Número: " + endereco.Numero + "\tBairro: "+ endereco.Bairro+"\n");
            sb.Append("Complemento: " + endereco.Complemento+ "\n");
            sb.Append("\n\n");
            sb.Append("Qtd\tDescrição\t\tValor(R$)\n");
            sb.Append("--------------------------------------------------------------\n");
            sb.Append("\n");
            foreach (Pedido ped in pedidos)
            {
                if(ped.ID_Bebida != null){
                    BebidaBean bebida = ws.BebidaBuscar((int)ped.ID_Bebida);
                    sb.Append(ped.Qtd+"\t"+bebida.Nome+"\t\t   "+bebida.Preco+"\n");
                }
                else if (ped.ID_Prato != null)
                {
                    PratoBean prato = ws.RecuperarPrato(ped.ID);
                    sb.Append(ped.Qtd + "\t" + prato.Nome + "\t\t   " + prato.Preco + "\n");
                }
            }

            sb.Append("--------------------------------------------------------------\n");
            sb.Append("\t\tSub-Total:\t" + Math.Round(this.total,2) + "\n");
            sb.Append("\t\tDesconto:\t" + Math.Round(this.desconto, 2) + "\n");
            sb.Append("\t\tTOTAL:\t" + Math.Round(this.totalcomdesconto,2) + "\n");
            sb.Append("\t\tForma de pagamento:  "+this.formadepagamento+"\n\n");
            sb.Append("\t\tTroco:\t"+Math.Round(this.troco,2)+"\n");
            sb.Append("\t\tValor à Receber:\t"+Math.Round(this.valorAReceber,2)+"\n");
            sb.Append("\n\n\n");
            sb.Append("\tAGRADECEMOS À PREFERÊNCIA");

            return sb.ToString();
        }       
    }
}